package MyArrayListBag;

import MyArrayListBag.EmptyException;

import java.util.Arrays;

public class MyArrayList {
    private int usedSize;
    private int[] elem;
public static final int DEFAULT=5;
    public MyArrayList() {
        elem=new int[DEFAULT];
    }
    //1.向顺序表中添加元素；
    public void add(int date){
        if(isFull()){
            grow();//扩容；
        }
        elem[usedSize++]=date;
    }
    public boolean isFull(){
        return usedSize==elem.length;
    }
    private void grow(){
        elem= Arrays.copyOf(elem,2*elem.length);
    }
    //2.向顺序表中某个位置添加元素；
    public void add(int pos,int date){
        checkPos(pos);
        if(isFull()){
            grow();
        }
        for(int i=usedSize-1;i>=pos;i--){
            elem[i+1]=elem[i];
        }
        elem[pos]=date;
        usedSize++;
    }
    public void checkPos(int pos){
        if(pos<0||pos>usedSize){
            throw new PosException("插入位置不合法异常");
        }
    }
    //3.获取顺序表中某个位置的元素；
    public int get(int pos){
        if(isEmpty()){
            throw new EmptyException("顺序表为空");
        }
        checkPos2(pos);
        return elem[pos];
    }
    public void checkPos2(int pos){
        if(pos<0||pos>=usedSize){
            throw new PosException("获取元素的位置不合法");
        }
    }
    //4.修改顺序表中某个位置的元素为某个值；
    public void set (int pos,int key){
        checkPos(pos);
        elem[pos]=key;
    }
    public  boolean isEmpty(){
        return usedSize==0;
    }
    //5.判断顺序表中是否包含某个元素；
    public boolean contains(int date){
        for(int i=0;i<usedSize;i++){
            if(elem[i]==date){
                return true;
            }
        }
        return false;
    }
    //6，删除顺序表中的某个元素；
    public void remove(int date){
        //①找到要删除元素的位置；
        int index=findIndex(date);
        if(index==-1){
            System.out.println("没有你要删除的元素");
            return;
        }
        //②.进行删除元素；
        for(int i=index;i<usedSize-1;i++){
            elem[i]=elem[i+1];
        }
        //③.记录顺序表有效数据的个数；
        usedSize--;
    }
    public int findIndex(int date){
        for(int i=0;i<usedSize;i++){
            if(elem[i]==date){
                return i;
            }
        }
        return -1;
    }
    //7.打印顺序表；
    public void disPlay(){
        for(int i=0;i<usedSize;i++){
            System.out.print(elem[i]+" ");
        }
        System.out.println();
    }
    //8.计算顺序表中有效数据个数；
    public int  size(){
        int count=0;
        for(int i=0;i<usedSize;i++){
            count++;
        }
        return count;
    }
    //9.清空顺序表；
    public void clear(){
        usedSize=0;
    }
}

